Go 語言不像python等程式有 classes,但是提供你可以在某種型態上定義方法(method),method 其實是作用在接收器(receiver)上的一種函式,接收器是某種型別的變數,所以其實 method 也就是一種特殊型別的函式。
這裏來用 Go Tutorial 上的例子來示範如何撰寫一個 method:
package main
import (
"fmt"
"math"
)
type Vertex struct {
X, Y float64
}
func (v Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
v := Vertex{3, 4}
fmt.Println(v.Abs()) // 5
}
解釋一下上述的程式碼,一開始先宣告一個名為 Vertex 結構型態,裡面的屬性包含 X(float64) 和 Y(float64),接著就是撰寫一個 method 了,這個 method 是以 Vertex 作為接收器,method 名稱為 Abs,最後回傳一個浮點數,接著 method 裡頭,即為對接收器的運算並回傳值。
在前言的時候,有解釋到 method 即為特殊的函式,這裡我們來一樣以 Go Tutorial 上的例子來看,如何用函式來達到與 method 一樣的結果:
package main
import (
"fmt"
"math"
)
type Vertex struct {
X, Y float64
}
func Abs(v Vertex) float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
v := Vertex{3, 4}
fmt.Println(Abs(v))
}
method 必須帶有接收器,本文章的皆以結構為接收器,其實 method 不侷限結構為接收器,你可以自己定義一個型態,例如整數或浮點數,或是指標都可以,配合自己的需求做調整。今天介紹了 method 給各位讀者,希望有讓各位讀者初步了解 method 的使用,也感謝您今天的閱讀!
https://tour.golang.org/methods/1
https://tour.golang.org/methods/2